Skip to content

Comments

feat(server): E2E 화면 비디오 녹화 MCP 도구 및 YAML 스텝 추가#79

Merged
ohah merged 9 commits intomainfrom
feat/e2e-video-recording
Feb 22, 2026
Merged

feat(server): E2E 화면 비디오 녹화 MCP 도구 및 YAML 스텝 추가#79
ohah merged 9 commits intomainfrom
feat/e2e-video-recording

Conversation

@ohah
Copy link
Owner

@ohah ohah commented Feb 21, 2026

E2E 화면 비디오 녹화 기능 (MCP 도구 + YAML 스텝)

제목(목적)

idb(iOS)와 adb(Android) 화면 녹화를 MCP 도구로 래핑하고, E2E YAML에서 startRecording/stopRecording 스텝으로 사용할 수 있게 한다.

작업 내용

  • v1 (MCP 도구): start_video_recording / stop_video_recording 도구를 추가했다. spawn으로 idb video 또는 adb shell screenrecord를 띄우고, stop 시 SIGINT 후 Android는 adb pull로 호스트 경로에 저장한다. filePath는 cwd 하위로 제한해 path traversal을 막았고, 서버 종료 시 stopAllRecordings를 호출해 좀비 프로세스를 방지한다.
  • v2 (YAML 스텝): parser·types·runner에 startRecording(path 선택), stopRecording 스텝을 추가했고, app-client에 해당 메서드를 두어 MCP 도구를 호출한다. path 생략 시 outputDir/e2e-recording.mp4를 쓰며, teardown에서 stopRecording을 두면 스텝 실패 시에도 녹화가 정리된다. e2e-yaml-reference(en/ko)에 비디오 스텝 설명을 보강했다.

docs/e2e-comparison.md의 비디오 녹화 행을 ✓로 바꿨고, 계획서 AC1–AC10을 반영했다.

CI 안정화: E2E Android job 타임아웃 45분→60분, 실패 시 스크린샷·로그·아티팩트 단계에 2분·3분 타임아웃 추가, Android logcat은 -t 3000으로 수집 제한. iOS tap이 idb 지연으로 간헐 타임아웃할 때를 위해 Command timed out 시 1.5초 대기 후 1회 재시도 적용. Android E2E에서 "버튼 20 (1)" waitForText 간헐 실패에 대해 Step 8은 testID #scroll-btn-20으로 scroll/tap/waitForText를 통일해 탭 오인을 막고, Step 9는 탭 후 wait 300과 waitForText selector 지정으로 상태 반영 여유를 둠. step1(첫 tap)에서 실패할 때를 위해 setup 직후 wait 500·첫 스텝을 waitForText('Count: 0')로 바꾸고, Android tap 실패 시 1.5초 대기 후 1회 재시도 적용. e2e-ci-reliability.md에 원인·대응 정리.

ohah added 2 commits February 21, 2026 23:12
- start_video_recording / stop_video_recording 도구 (idb / adb screenrecord)
- spawn 기반 장시간 프로세스, stop 시 SIGINT 후 Android는 adb pull
- filePath는 cwd 하위로 제한 (path traversal 방지)
- 서버 종료 시 stopAllRecordings 호출 (AppSession.stop + process exit)
- parser: startRecording(path?), stopRecording 스키마
- runner: executeStep 분기, outputDir/e2e-recording.mp4 기본 경로
- app-client: startRecording/stopRecording 메서드 (MCP 도구 호출)
- e2e-yaml-reference (en/ko): 비디오 스텝 설명 및 카테고리
- AC7/AC8 체크
@ohah ohah self-assigned this Feb 21, 2026
@ohah ohah added the enhancement New feature or request label Feb 21, 2026
ohah added 7 commits February 21, 2026 23:38
- video-recording: filePath cwd 밖 검증, stop 시 No active recording 반환
- parser-steps: startRecording/stopRecording 파싱 케이스
45분 초과로 job 취소 발생. E2E iOS와 동일하게 60분 적용
- 실패 시 스크린샷·로그 저장: 2분 타임아웃 (무한 대기 방지)
- 아티팩트 업로드: 3분 타임아웃
- Android: adb logcat -d -t 3000으로 마지막 3000줄만 수집 (전체 덤프 후 tail 제거)
- idb ui tap이 Command timed out 시 1.5초 대기 후 1회 재시도
- e2e-ci-reliability.md에 원인·대응 정리 반영
- tap 직전 wait 500 추가, waitForText timeout 15s→20s (CI 에뮬 지연 대비)
- Step 8: testID #scroll-btn-20으로 scroll/tap/waitForText 통일
- Step 9: 탭 후 wait 300, waitForText에 selector 지정
@ohah ohah merged commit 1931e01 into main Feb 22, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant